package edu.fasta.sisinfo2.builders;

import java.util.ArrayList;
import java.util.List;

import edu.fasta.sisinfo2.juegos.DoblePar;
import edu.fasta.sisinfo2.juegos.Juego;
import edu.fasta.sisinfo2.juegos.Par;
import edu.fasta.sisinfo2.poker.Carta;
import edu.fasta.sisinfo2.poker.Mano;

public class DobleParBuilder implements BuilderJuegos{

	private BuilderJuegos builderSiguiente;
	
	public DobleParBuilder(BuilderJuegos builderSiguiente){
		this.setBuilderSiguiente(builderSiguiente);
	}

	public Juego buildJuego(Mano mano) {

		List listaDeManos = new ArrayList();
		listaDeManos = mano.combinatoria(); //le paso una mano de siete cartas y me da las combinatorias posibles
		List manoActual = new ArrayList();
		int cant = 0;

		
				
		for(int i=0; i<listaDeManos.size(); i++){ //recorro todas las manos posibles (21)
			manoActual = (List) listaDeManos.get(i);
			int j;
			boolean flag = true;
			Carta cartaUno = new Carta(0, 0);
			Carta cartaDos = new Carta(0, 0);
			Carta cartaTres = new Carta(0, 0);
			Carta cartaCuatro = new Carta(0, 0);
	
		
	
			j = 1;

			while (j<manoActual.size() & flag) {
				
				if ( ((Carta) manoActual.get(0)).getPuntaje() == ( ((Carta) manoActual.get(j)).getPuntaje()) ){
					
					cartaUno = (Carta) manoActual.get(0);
					cartaDos = (Carta) manoActual.get(j);
					
					manoActual.remove(0);
					manoActual.remove(j-1);

					if(((Carta) manoActual.get(0)).getPuntaje() == ( ((Carta) manoActual.get(1)).getPuntaje()) ||
						((Carta) manoActual.get(0)).getPuntaje() == ( ((Carta) manoActual.get(2)).getPuntaje())){
							cartaTres = (Carta) manoActual.get(0);
							
							if(((Carta) manoActual.get(0)).getPuntaje() == ( ((Carta) manoActual.get(1)).getPuntaje())){
								cartaCuatro = (Carta) manoActual.get(1);
							}else{
								cartaCuatro = (Carta) manoActual.get(2);
							}

							cant = 2;
							flag = false;
					}else{
						if (((Carta) manoActual.get(1)).getPuntaje() == ( ((Carta) manoActual.get(2)).getPuntaje())){
							
							cartaTres = (Carta) manoActual.get(1);
							cartaCuatro = (Carta) manoActual.get(2);
							
							cant = 2;
							flag = false;
						}
					}
				}
				j++;
			}
			if(cant == 2){
				Par unPar = new Par(cartaUno, cartaDos);
				Par otroPar = new Par(cartaTres, cartaCuatro);
				return new DoblePar(unPar, otroPar); 
			}			
		}
		
		return this.getBuilderSiguiente().buildJuego(mano);
}

	public BuilderJuegos getBuilderSiguiente() {
		return builderSiguiente;
	}
	
	public void setBuilderSiguiente(BuilderJuegos builderSiguiente) {
		this.builderSiguiente = builderSiguiente;
	}

}
